/**
 * 研发项目常量定义文件
 * 定义统一的集合名称、状态枚举等，供前端和云函数共享使用
 */

// 集合名称定义
const COLLECTION_NAMES = {
  PROJECT: 'research_project',
  RESOURCE: 'research_project_resource',
  STATE_HISTORY: 'research_project_state_history',
  SNAPSHOT: 'research_project_snapshot',
  BRANCH: 'research_project_branch'
};

// 项目状态定义 - 严格按照状态机文档
const PROJECT_STATUS = {
  PROJECT_REVIEW: 1,  // 项目审核
  DORMANT: 2,         // 休眠
  ACTIVE: 3,          // 活动
  COMPLETED: 99       // 已完成
};

// 项目审核子状态
const PROJECT_REVIEW_SUB_STATUS = {
  DIRECTOR: 'director',           // 董事长
  RD_MANAGER: 'rd_manager',       // 研发经理
  ASSIGNMENT: 'assignment'        // 分配
};

// 休眠子状态
const DORMANT_SUB_STATUS = {
  REVIEW: 'review',               // 审核
  ARCHIVE: 'archive'              // 归档
};

// 活动状态
const ACTIVE_STATE = {
  HARDWARE_CONFIRM: 'hardware_confirm',         // 硬件确认
  HARDWARE: 'hardware',                         // 硬件
  DEBUG: 'debug',                               // 调试
  DATA_SYNC: 'data_sync',                       // 资料同步
  TESTING: 'testing',                           // 测试
  CUSTOMER_CONFIRM: 'customer_confirm',         // 客户确认
  ORDER_PREPARATION: 'order_preparation',       // 订单准备 
  PRODUCTION: 'production',                     // 生产
  PRODUCT_FEEDBACK: 'product_feedback'          // 待反馈
};

// 硬件子状态
const HARDWARE_SUB_STATE = {
  DESIGN: 'design',               // 设计
  REVIEW: 'review',               // 审核
  SAMPLE: 'sample',               // 打样
  PRODUCTION_SAMPLE: 'prod_sample', // 制样
  IN_STOCK: 'in_stock'            // 在库
};

// 测试子状态
const TESTING_SUB_STATE = {
  TESTING: 'testing',             // 测试中
  NO_TEST_REVIEW: 'no_test_review' // 免测审核
};

// 客户确认子状态
const CUSTOMER_CONFIRM_SUB_STATE = {
  DELIVERY: 'delivery',           // 寄样
  TESTING: 'testing',             // 测试
  NO_SAMPLE_REVIEW: 'no_sample_review', // 无签样审核
  SAMPLE_IN_STOCK: 'sample_in_stock',   // 样品在库
  ARCHIVE: 'archive'              // 归档
};

// 订单准备子状态
const ORDER_PREPARATION_SUB_STATE = {
  WAITING: 'waiting',             // 待量产
  REVIEW: 'review',               // 审核
  DOC_CONTROL: 'doc_control',     // 文控
  SUPPLEMENT: 'supplement',       // 补充资料
  PRE_MEETING: 'pre_meeting',     // 产前会
  PREPARATION: 'preparation'      // 生产准备
};

// 生产子状态
const PRODUCTION_SUB_STATE = {
  PRODUCING: 'producing',         // 生产中
  PE_HANDLING: 'pe_handling',     // PE处理
  RD_CHECKING: 'rd_checking',     // 研发排查
  COMPLETED: 'completed'          // 完成
};

// 项目优先级
const PROJECT_PRIORITY = {
  LOW: 1,                         // 低
  MEDIUM: 2,                      // 中
  HIGH: 3                         // 高
};

// 项目分类
const PROJECT_CATE = {
  HARDWARE: 0,                    // 硬件项目
  SOFTWARE: 1,                    // 软件项目
  INTEGRATED: 2,                  // 综合项目
  RESEARCH: 3,                    // 研究项目
  OTHER: 4                        // 其他项目
};

// 标准数据库结构定义 - 优化后按照分组排列
const PROJECT_SCHEMA = {
  // 基础标识信息（优先显示）
  id: 'string|true|comment=唯一标识',
  projectCode: 'string|true|comment=项目编号',
  projectTitle: 'string|false|comment=项目标题',
  projectName: 'string|true|comment=项目名称',
  code: 'string|false|comment=代码编号',
  model: 'string|false|comment=型号',
  
  // 分类与描述信息
  projectType: 'int|true|default=0|comment=项目类型编码',
  projectTypeName: 'string|false|comment=项目类型名称',
  category: 'string|false|comment=项目类别',
  applicationType: 'string|false|comment=应用类型',
  description: 'string|false|comment=详细描述',
  projectDesc: 'string|false|comment=项目描述',
  
  // 客户信息
  customerId: 'string|false|comment=客户ID',
  customerName: 'string|false|comment=客户名称',
  customerContactName: 'string|false|comment=客户联系人',
  customerContactMobile: 'string|false|comment=客户联系电话',
  
  // 申请人信息
  applicantId: 'string|false|comment=申请人ID',
  applicantName: 'string|false|comment=申请人姓名',
  
  // 项目人员信息
  projectManagerId: 'string|false|comment=项目经理ID',
  projectManagerName: 'string|false|comment=项目经理姓名',
  hardwareOwnerId: 'string|false|comment=硬件负责人ID',
  hardwareOwnerName: 'string|false|comment=硬件负责人姓名',
  softwareOwnerId: 'string|false|comment=软件负责人ID',
  softwareOwnerName: 'string|false|comment=软件负责人姓名',
  teamMemberIds: 'array|true|default=[]|comment=团队成员ID数组',
  teamMemberNames: 'array|true|default=[]|comment=团队成员姓名数组',
  teamMemberRoles: 'array|true|default=[]|comment=团队成员角色数组',
  
  // 状态层级信息（采用level表示状态）
  level1: 'int|true|default=1|comment=主状态：1=项目审核,2=休眠,3=活动,99=已完成',
  level2: 'string|false|comment=二级状态（子状态：如director=董事长,rd_manager=研发经理）',
  level3: 'string|false|comment=三级状态（活动状态：如debug=调试,hardware=硬件等）',
  level4: 'string|false|comment=四级状态（活动子状态：如适用时）',
  statusDesc: 'string|false|comment=状态描述',
  
  // 项目管理
  priorityCode: 'int|true|default=1|comment=项目优先级编码：1=低,2=中,3=高',
  progress: 'int|true|default=0|comment=项目进度：0-100',
  
  // 系统时间
  createTime: 'int|true|comment=记录创建时间',
  updateTime: 'int|true|comment=记录最后更新时间',
  
  // 项目时间点
  startDate: 'int|false|comment=项目实际开始日期',
  endDate: 'int|false|comment=项目实际结束日期',
  deadline: 'int|false|comment=项目截止日期(交付期限)',
  
  // 计划时间点
  planStartDate: 'int|false|comment=计划开始日期',
  planEndDate: 'int|false|comment=计划结束日期',
  
  // 状态时间点
  stateTime: 'int|false|comment=当前状态更新时间',
  stateExpireTime: 'int|false|comment=当前状态截止时间(如适用)',
  
  // 样品信息
  hasSample: 'string|false|comment=是否有样品',
  sampleImages: 'array|false|default=[]|comment=样品图片',
  
  // 电机控制类项目特有参数 - 基本参数
  workTemp: 'string|false|comment=工作环境温度',
  certification: 'string|false|comment=认证要求',
  lowPower: 'string|false|comment=低功耗',
  startupTime: 'string|false|comment=启动时间',
  conformalCoating: 'string|false|comment=三防漆要求',
  
  // 电机基本参数
  ratedVoltage: 'string|false|comment=额定电压',
  maxPower: 'string|false|comment=最大功率',
  maxSpeed: 'string|false|comment=最高转速',
  polePairs: 'string|false|comment=极对数',
  hasHall: 'string|false|comment=HALL/磁编',
  hasBrake: 'string|false|comment=刹车功能',
  
  // 控制参数
  controlMode: 'string|false|comment=控制模式(恒功率/恒转速)',
  controlAlgorithm: 'string|false|comment=控制算法(FOC/方波/开环/其他)',
  rotation: 'string|false|comment=正反转方式',
  controlInterface: 'string|false|comment=控制方式',
  
  // PWM控制参数
  pwmStartDuty: 'string|false|comment=开机点占空比',
  pwmStopDuty: 'string|false|comment=关机点占空比',
  pwmDutyRange: 'string|false|comment=有效占空比',
  pwmFreqRange: 'string|false|comment=频率范围',
  
  // VSP控制参数
  vspStartVoltage: 'string|false|comment=开机点电压',
  vspStopVoltage: 'string|false|comment=关机点电压',
  vspVoltageRange: 'string|false|comment=有效电压范围',
  
  // 保护参数
  stallProtection: 'string|false|comment=堵转保护',
  stallHoldTime: 'string|false|comment=堵转保持时间',
  stallRestartTime: 'string|false|comment=堵转重启时间',
  stallRestartCount: 'string|false|comment=堵转重启次数',
  
  overvoltageProtection: 'string|false|comment=过压保护',
  overvoltageValue: 'string|false|comment=过压保护值',
  overvoltageRecoveryValue: 'string|false|comment=过压恢复值',
  
  undervoltageProtection: 'string|false|comment=欠压保护',
  undervoltageValue: 'string|false|comment=欠压保护值',
  undervoltageRecoveryValue: 'string|false|comment=欠压恢复值',
  
  temperatureProtection: 'string|false|comment=温度保护',
  protectionTemp: 'string|false|comment=保护温度',
  recoveryTemp: 'string|false|comment=恢复温度',
  
  overcurrentProtection: 'string|false|comment=过流保护',
  overcurrentValue: 'string|false|comment=过流保护值',
  
  currentLimitProtection: 'string|false|comment=限流保护',
  currentLimitValue: 'string|false|comment=限流值',
  
  blockageProtection: 'string|false|comment=堵孔/空转保护',
  blockageDiameter: 'string|false|comment=堵孔孔径',
  blockageHoldTime: 'string|false|comment=堵孔保持时间',
  
  phaseProtection: 'string|false|comment=缺相保护',
};

// 导出所有常量
module.exports = {
  COLLECTION_NAMES,
  PROJECT_STATUS,
  PROJECT_REVIEW_SUB_STATUS,
  DORMANT_SUB_STATUS,
  ACTIVE_STATE,
  HARDWARE_SUB_STATE,
  TESTING_SUB_STATE,
  CUSTOMER_CONFIRM_SUB_STATE,
  ORDER_PREPARATION_SUB_STATE,
  PRODUCTION_SUB_STATE,
  PROJECT_PRIORITY,
  PROJECT_CATE,
  PROJECT_SCHEMA
}; 